// inizializzazione
document.addEventListener("DOMContentLoaded", function() {
    console.log("Documento caricato!"); // debugmsg
     
     
    // Recupero del contesto 2D dell'elemento canvas
    var canvas = document.getElementById("gamecanvas"),
        ctx = canvas.getContext("2d");
     
    console.log("contesto 2d acquisito: " + ctx);
     
    // altezza e larghezza della finestra
    var W = window.innerWidth, 
        H = window.innerHeight;
         
    canvas.width  = W;
    canvas.height = H;      
         
    // posizionamento delle barrette
    leftbar.x = Math.ceil(W/100*2);
    rightbar.x = Math.ceil(W/100*98);
    leftbar.y = rightbar.y = Math.ceil(H/2 - leftbar.height/2);
    leftbar.width = rightbar.width = Math.ceil(W/100*1); // barretta larga il 2% dello schermo
    leftbar.height = rightbar.height = Math.ceil(H/100*25); // barretta alta il 10% dello schermo
     
    // posizionamento iniziale della palla
    ball.setup(canvas.width,canvas.height);
     
     
    function render() { 
     
        // puliamo lo sfondo
        ctx.fillStyle = "#000";
        ctx.fillRect(0, 0, W, H);
        //console.log("puliamo lo sfondo");
         
         
        // disegnamo gli oggetti
        leftbar.draw(ctx);
        rightbar.draw(ctx);
         
        // controlla le collisioni con i bordi
        if ((ball.y-ball.radius < 0) || (ball.y+ball.radius > H))
            ball.angle = 2*Math.PI - ball.angle; 
                 
        // aggiorna la posizione della palla
        ball.move(ctx);
         
         if (ball.collide(leftbar)){
         	console.log('collisione con leftbar');
         	ball.x+=15;
         	ball.speed = -ball.speed;
         	ball.angle = 2*Math.PI - ball.angle;
         	 
         } 
         if (ball.collide(rightbar)){
          console.log('collisione con rightbar');
          ball.x-=15;
          ball.speed = -ball.speed;
          ball.angle = 2*Math.PI - ball.angle; 
         }
         
         if(ball.scored(leftbar)){
         	ball.setup(canvas.width,canvas.height);
         }
         
         if(ball.scored(rightbar)){
         	ball.setup(canvas.width,canvas.height);
         }
         
         
        ball.draw(ctx);     
    }
     
    // primo disegno della scena
    render();
         
    // elaborazione degli eventi della tastiera
    window.onkeydown = function(event) {
        //console.log('keypressed: '+ event.which); 
        switch (event.which) {
        case 38:
            rightbar.y -= rightbar.speed;
            break;
        case 40:
            rightbar.y += rightbar.speed;
            break;
        case 87:
            leftbar.y -= leftbar.speed;
            break;
        case 83:
            leftbar.y += leftbar.speed;
            break;    
        default:
            return; // evita di restituire false
        }
        return false;
    };
     
     
     
    // impostazione del loop
    var then = Date.now(); // timestamp iniziale
    setInterval(mainLoop, 2); 
    // la scelta dei 50 ms è per non intasare troppo il processore nel test
    // si può anche mettere 1ms 
     
     
    function mainLoop()
    {
        // timestamp in ms (tempo passato da1l' 1/1/1970 alle 00:00)
        var now = Date.now();
        // differenza tra il momento attuale e il ciclo appena precedente
        var delta = now - then;
        render();
 
        then = now;
    }
     
});